#ifndef MAPMANAGER_H
#define MAPMANAGER_H

#include <QMap>
#include <QObject>
#include <QPixmap>
#include <QVector>

class QGraphicsScene;

enum TerrainType {
    GROUND = 0,      // 基础地面
    WALL = 1,        // 墙壁/障碍物
    PATH = 2,        // 道路
    GRASS = 3,       // 草地
    WATER = 4,       // 水域
    POINT_BIRTH = 5, // 出生点
    TREE = 6         // 树
};

struct MapData
{
    QString name;                   // 地图名称
    QPixmap tileset;                // 瓦片集图片
    int width;                      // 地图宽度（瓦片数）
    int height;                     // 地图高度（瓦片数）
    QVector<QVector<int>> tileData; // 二维数组存储每个瓦片的索引
    QPoint pointBrith;              // 出生点位置
};

class MapManager : public QObject
{
    Q_OBJECT
public:
    explicit MapManager(QObject *parent = nullptr);
    void registerFixedMap(const QString &name,
                          const QString &tilesetPath,
                          const QVector<QVector<int>> &mapDate);
    void registerMap(const QString &name,
                     const QString &tilesetPath,
                     int width = 40,
                     int height = 25);
    void loadMap(const QString &name, QGraphicsScene *scene);
    bool isInGrassArea(const QPointF &position) const;
    const static int tileSize = 32;
    const MapData &getCurrentMapData() { return maps[currentMap]; }
    void SwitchMap(const QString & name, QGraphicsScene *scene);
private:
    QMap<QString, MapData> maps;
    QString currentMap;

    void findSpecialPoint(MapData &map);
    void generateMapData(MapData &map);
};

#endif // MAPMANAGER_H
